package p234

import node.ListNode
import node.ListNodeManager

/**
 * <pre>
 *   234. 回文链表
 *
 *   请判断一个链表是否为回文链表。
 *
 *   示例 1:
 *   输入: 1->2
 *   输出: false
 *
 *   示例 2:
 *   输入: 1->2->2->1
 *   输出: true
 *
 *   进阶：
 *   你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题？
 * </pre>
 */
class Solution {
    companion object {
        @JvmStatic
        fun main(s: Array<String>) {
            val nums: IntArray = intArrayOf(1, 2, 2, 1)
            val b: Boolean = ContextStragty(RecursiveStragty())
                    .isPalindrome(ListNodeManager.createListNodeByArray(nums))
            System.out.println(b)
        }
    }

    class ContextStragty : Stragty {
        val stragty: Stragty

        constructor(stragty: Stragty) {
            this.stragty = stragty
        }

        override fun isPalindrome(head: ListNode?): Boolean {
            return stragty.isPalindrome(head)
        }
    }

}